/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.proyecto.modelado;

import com.proyecto.datos.ConnDB;
import com.proyecto.datos.EntityNota;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.Calendar;

/**
 *
 * @author mario
 */
public class Nota {

//    public ArrayList ObtenerNotas(int id_grupo) {
//        ArrayList arry = new ArrayList();
//        String cadenaSQL = "select nota.id_nota, al.carnet, al.nombre,al.apellido,nota.lab1,nota.discusion1,nota.lab2, "
//                + "nota.discusion2, nota.lab3, nota.discusion3, nota.lab4, nota.discusion4 "
//                + "from NOTA nota, ALUMNO al, DETALLE_ALUMNO detal, DETALLE_HORARIO_LAB detahor "
//                + "where nota.ALUMNO_id_alumno = al.id_alumno "
//                + "and al.id_alumno = detal.ALUMNO_id_alumno "
//                + "and detal.DETALLE_HORARIO_LAB_id_detalle_horario_lab=detahor.id_detalle_horario_lab "
//                + "and (detahor.MATERIA_id_materia = 1 or detahor.MATERIA_id_materia = 5) "
//                + "and detahor.GRUPO_id_grupo = "+id_grupo+";";
//
//        EntityNota entNota = new EntityNota();
//        arry = entNota.EjecutarConsulta(cadenaSQL);
//
//        entNota = null;
//
//        return arry;
//    }
    public ArrayList NotasIntroUnidad1(int id_grupo, int id_materia1, int id_materia2) {
        ArrayList arry = new ArrayList();
        String cadenaSQL = "select nota.id_nota, al.carnet, al.nombre,al.apellido,mate.cod_asignatura,nota.lab1,nota.discusion1,"
                + "nota.lab2,nota.discusion2,nota.lab3,nota.discusion3,nota.lab4,nota.discusion4,nota.prom1,nota.prom2,nota.prom3,nota.prom4 "
                + "from NOTA nota inner join ALUMNO al on nota.ALUMNO_id_alumno=al.id_alumno, "
                + "DETALLE_ALUMNO detal inner join DETALLE_HORARIO_LAB detalab "
                + "on detal.DETALLE_HORARIO_LAB_id_detalle_horario_lab = detalab.id_detalle_horario_lab "
                + "inner join MATERIA mate on detalab.MATERIA_id_materia=mate.id_materia "
                + "where (detalab.MATERIA_id_materia="+id_materia1+" or detalab.MATERIA_id_materia="+id_materia2+") "
                + "and detal.ALUMNO_id_alumno=al.id_alumno "
                + "and detalab.GRUPO_id_grupo='"+id_grupo+"'; ";
        EntityNota entNota = new EntityNota();
        arry = entNota.EjecutarConsulta(cadenaSQL);

        entNota = null;
        return arry;
    }

//    public String ModificarNotasUnidad1(int id_nota, double lab1, double dis1) {
//
//        String cadenaSQL;
//        String msj;
//
//        cadenaSQL = "update NOTA "
//                + "set lab1=" + lab1 + ", discusion1=" + dis1 + " "
//                + "where id_nota = " + id_nota + "";
//        EntityNota entNota = new EntityNota();
//        msj = entNota.EjecutarComando(cadenaSQL);
//
//        return msj;
//
//    }
    
//    public String ModificarNotasUnidad2(int id_nota, double lab2, double dis2) {
//
//        String cadenaSQL;
//        String msj;
//
//        cadenaSQL = "update NOTA "
//                + "set lab2=" + lab2 + ", discusion2=" + dis2 + " "
//                + "where id_nota = " + id_nota + "";
//        EntityNota entNota = new EntityNota();
//        msj = entNota.EjecutarComando(cadenaSQL);
//
//        return msj;
//
//    }
    
    public String SP_ModificarNotaUnidad1(int id_nota, double lab1, double dis1) {
    
     String msj = "Notas han sido actualizadas satisfactoriamente";
        Connection cn;
        ConnDB db = new ConnDB();
        
        try {
            Class.forName(db.getDriver());
            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());



            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = cn.prepareCall("CALL U_detalla_nota_unidad1(?,?,?)");
            //se cargan los parametros de entrada
            proc.setInt("_id_nota", id_nota);
            proc.setDouble("_lab1", lab1);
            proc.setDouble("_discusion1", dis1);
         
           
            // Se ejecuta el procedimiento almacenado
            proc.execute();


        } catch (Exception ex) {
            System.out.println(ex.toString());
            msj = "Error";
        }

        return msj;

    }
    
    public String SP_ModificarNotaUnidad2(int id_nota, double lab2, double dis2) {
    
     String msj = "Notas han sido actualizadas satisfactoriamente";
        Connection cn;
        ConnDB db = new ConnDB();
        
        try {
            Class.forName(db.getDriver());
            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());



            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = cn.prepareCall("CALL U_detalla_nota_unidad2(?,?,?)");
            //se cargan los parametros de entrada
            proc.setInt("_id_nota", id_nota);
            proc.setDouble("_lab2", lab2);
            proc.setDouble("_discusion2", dis2);
         
           
            // Se ejecuta el procedimiento almacenado
            proc.execute();


        } catch (Exception ex) {
            System.out.println(ex.toString());
            msj = "Error";
        }

        return msj;

    }
    
     public String SP_ModificarNotaUnidad3(int id_nota, double lab3, double dis3) {
    
     String msj = "Notas han sido actualizadas satisfactoriamente";
        Connection cn;
        ConnDB db = new ConnDB();
        
        try {
            Class.forName(db.getDriver());
            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());

            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = cn.prepareCall("CALL U_detalla_nota_unidad3(?,?,?)");
            //se cargan los parametros de entrada
            proc.setInt("_id_nota", id_nota);
            proc.setDouble("_lab3", lab3);
            proc.setDouble("_discusion3", dis3);
         
           
            // Se ejecuta el procedimiento almacenado
            proc.execute();


        } catch (Exception ex) {
            System.out.println(ex.toString());
            msj = "Error";
        }

        return msj;

    }
     
     
     public String SP_ModificarNotaUnidad4(int id_nota, double lab4, double dis4) {
    
     String msj = "Notas han sido actualizadas satisfactoriamente";
        Connection cn;
        ConnDB db = new ConnDB();
        
        try {
            Class.forName(db.getDriver());
            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());

            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = cn.prepareCall("CALL U_detalla_nota_unidad4(?,?,?)");
            //se cargan los parametros de entrada
            proc.setInt("_id_nota", id_nota);
            proc.setDouble("_lab4", lab4);
            proc.setDouble("_discusion4", dis4);
         
           
            // Se ejecuta el procedimiento almacenado
            proc.execute();


        } catch (Exception ex) {
            System.out.println(ex.toString());
            msj = "Error";
        }

        return msj;

    }

    public ArrayList BuscarAlumno(int id_grupo, String dato,int id_materia1, int id_materia2) {

        ArrayList arry;

        String cadenaSQL = "select nota.id_nota, al.carnet, al.nombre,al.apellido,mate.cod_asignatura,nota.lab1,nota.discusion1,"
                + "nota.lab2,nota.discusion2,nota.lab3,nota.discusion3,nota.lab4,nota.discusion4,nota.prom1,nota.prom2,nota.prom3,nota.prom4 "
                + "from NOTA nota inner join ALUMNO al on nota.ALUMNO_id_alumno=al.id_alumno, "
                + "DETALLE_ALUMNO detal inner join DETALLE_HORARIO_LAB detalab "
                + "on detal.DETALLE_HORARIO_LAB_id_detalle_horario_lab = detalab.id_detalle_horario_lab "
                + "inner join MATERIA mate on detalab.MATERIA_id_materia=mate.id_materia "
                + "where (detalab.MATERIA_id_materia="+id_materia1+" or detalab.MATERIA_id_materia="+id_materia2+") "
                + "and detalab.GRUPO_id_grupo='"+id_grupo+"' "
                + "and detal.ALUMNO_id_alumno=al.id_alumno "
                + "and concat(al.carnet, al.nombre,al.apellido) like '%" + dato + "%' "
                + "order by al.carnet;";
        EntityNota entnota = new EntityNota();
        arry = entnota.EjecutarConsulta(cadenaSQL);
        entnota = null;
        return arry;

    }

    public String generarTXT(ArrayList arry) {
        String msj;
        String fecha;
        String nombre;
        String fila;
        Calendar cal = Calendar.getInstance();
        int anno, mes, dia, hora, min, seg;
        try {
            anno = cal.get(Calendar.YEAR);
            mes = cal.get(Calendar.MONTH) + 1;
            dia = cal.get(Calendar.DATE);
            hora = cal.get(Calendar.HOUR);
            min = cal.get(Calendar.MINUTE);
            seg = cal.get(Calendar.SECOND);
            fecha = String.valueOf(dia) + String.valueOf(mes) + String.valueOf(anno) + "_" + String.valueOf(hora) + String.valueOf(min) + String.valueOf(seg);
            nombre = "/home/mario/NetBeansProjects/trunk/ProyectoUFG/src/com/archivo/Notas_IAF0_FISI" + fecha + ".txt";
            File f = new File(nombre);
            PrintWriter pw = new PrintWriter(new FileWriter(f, true));
            EntityNota entNota;
            for (int i = 0; i < arry.size(); i++) {
                entNota = (EntityNota) arry.get(i);
                fila = entNota.getId_nota() + "," + entNota.getEntCarnet() + "," + entNota.getEntNombre() + "," + entNota.getEntApellido() + "," + entNota.getLab1() + "," + entNota.getDiscusion1() + "," + ((entNota.getLab1() * 0.05) + (entNota.getDiscusion1() * 0.05));
                pw.println(fila);
            }
            pw.close();
            msj = "Los datos fueron almacenados en el archivo correctamente";
        } catch (Exception ex) {
            msj = ex.toString();
        }
        return msj;
    }
}
